

public class LinkedListTest {

	public static void main(String[] args) {
		
		LinkedList list = new LinkedList();
		
		assert list.getFirst() == null;
		assert list.getLast() == null;
		assert list.size() == 0;
		assert list.isEmpty();

		ListNode last = null;
		for (int i=0; i < args.length; ++i) {
			last = list.insert(args[i], last);
			assert last == list.getLast();
		}

		assert list.size() == args.length;
		assert list.isEmpty() == (args.length == 0);

		ListNode cur = list.getFirst();
		for (int i=0; i < args.length; ++i) {
			assert cur.getElement().equals(args[i]);
			cur = cur.getNext();
		}

		assert cur == null;

		for (int i=0; i < args.length; ++i) {
			assert list.find(args[i], null) != null;
		}

		assert list.find(null, null) == null;

		list.clear();
		for (int i=0; i < args.length; ++i) {
			list.insert(args[i], null);
		}

		cur = list.getFirst();
		for (int i=0; i < args.length; ++i) {
			assert cur.getElement().equals(args[ args.length - i - 1 ]);
			cur = cur.getNext();
		}

		assert cur == null;

		for (int i=0; i < args.length; ++i) {
			assert list.getLast().next == null;
			list.remove(list.find(args[i], null));
		}

		assert list.getLast() == null;
		
		assert list.size() == 0;
		assert list.isEmpty();

		for (int i=0; i < args.length; ++i) {
			assert list.find(args[i], null) == null;
		}

		assert list.find(null, null) == null;

		System.out.println("Tests Succeeded!");
	}
}
